home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
fb386
/
tank
/
tank.bas
next >
Wrap
BASIC Source File
|
1993-11-30
|
4KB
|
120 lines
10 '******* VS TANK BATTLE for F-BASIC386Ver1.1L21
20 '******* by KIM (Tekefumi Kimura)
30 '******* 1993.8
40 SCREEN@0:COLOR,0:VIEW:WINDOW:PALETTE:CLS
50 '** スプライト作成
60 RAD=3.14159!/180:DIM CHA1%(64),CHA2%(64)
70 FOR D=0 TO 80 STEP 10:SIND=SIN(D*RAD):COSD=COS(D*RAD)
80 RESTORE 1110:CLS
90 FOR I=0 TO 7:IY=I-3.5!:READ CH1$,CH2$
100 FOR J=0 TO 15 STEP .5!:JX=J-7.5!
110 CH1=VAL("&H"+MID$(CH1$,INT(J)+1,1))
120 CH2=VAL("&H"+MID$(CH2$,INT(J)+1,1))
130 XX=7.5!+COSD*JX-SIND*IY
140 YY=7.5!+COSD*IY+SIND*JX
150 PSET(XX,YY),%+CH1:PSET(XX+16,YY),%+CH2
160 NEXT J,I
170 GET@A(0,0)-(15,15),CHA1%:GET@A(16,0)-(31,15),CHA2%
180 DEF SPRITE 0,D/10,CHA1%,0:DEF SPRITE 0,9+D/10,CHA2%,0
190 NEXT D
200 DEF SPRITE 3,0
210 PALETTE 12,2:PALETTE 10,4
220 DEF SPRITE 3,1
230 '** タイトル
240 SCREEN@1:CLS:SPRITE ON:SPRITE SCREEN(32,0)
250 LINE(0,0)-(319,239),PSET,[50,50,50],BF
260 SYMBOL(50,100),"VS TANK BATTLE",1,1,6,,,1
270 SYMBOL(150,150),"PUSH 'RUN' BUTTON",1,1,1,,,1
280 WHILE PTRIG(1)<>4 AND PTRIG(2)<>4:WEND
290 '** スプライト初期設定
300 FOR I=0 TO 1
310 DEF SPRITE 1,I,(0,0),9,,,,I:DEF SPRITE 1,2+I,(0,0),0,,,,I
320 NEXT I
330 '** 戦車を置く
340 FOR I=0 TO 3:SPRITE 0,I,1:NEXT
350 'SPRITE 6,0,100,120:SPRITE 6,2,100,120:SPRITE 6,1,200,120:SPRITE 6,3,200,120
360 '** スクリーンの設定
370 LINE(0,0)-(319,239),PSET,[50,50,50],BF
380 FOR I=0 TO 15:FOR J=0 TO 11
390 LINE(32+I*16,24+J*16)-(32+I*16+15,24+J*16+15),PSET,0,BF,[0,0,50]
400 NEXT J,I
410 '** 変数の設定
420 K=0:RAD=3.14159!/180
430 FOR I=0 TO 1
440 D(I)=RND*360:HD(I)=D(I)
450 X(I)=70+100*I+60*RND:Y(I)=120:DM(I)=0
460 SYMBOL(22+I*282,22),"DAMAGE",.5!,.5!,3,3,,,1
470 NEXT
480 '**** メインルーチン
490 WHILE K=0
500 FOR I=0 TO 1
510 PT=PTRIG(I+1):PA=PAD(I+1)
520 D(I)=D(I)-((PA=3)-(PA=7))*3
530 D(I)=D(I)+((D(I)>=360)-(D(I)<0))*360
540 HD(I)=HD(I)-((PT=1)-(PT=2))*5
550 HD(I)=HD(I)+((HD(I)>=360)-(HD(I)<0))*360
560 GOSUB 680:GOSUB 770:GOSUB 860:GOSUB 960
570 GET@A(X(I)+40,Y(I)+8)-(X(I)+40,Y(I)+8),C%
580 IF C%(0)=6342 THEN DM(I)=DM(I)+1:Q=I:GOSUB 1070
590 NEXT
600 SPRITE TIME
610 WEND
620 '** 勝ち表示
630 SYMBOL(60,100),STR$(2-W)+" PLAYERの勝ち!",1,1,6,,,1
640 WAIT 200
650 WHILE PTRIG(1)=0 AND PTRIG(2)=0:WEND:GOTO 250
660 '---- サブルーチン
670 '** 自走車の回転
680 DD=D(I):DD=DD+(AD>=356)*360:DD%=DD/10
690 SPRITE 1,2+I,(DD% MOD 9)
700 ON INT(DD%/9)+1 GOTO 710,720,730,740
710 SPRITE 3,2+I,0:GOTO 750
720 SPRITE 3,2+I,6:GOTO 750
730 SPRITE 3,2+I,3:GOTO 750
740 SPRITE 3,2+I,5
750 RETURN
760 '** 砲塔の回転
770 AD=D(I)+HD(I):AD=AD+(AD>=356)*360:AD%=AD/10
780 SPRITE 1,I,(AD% MOD 9)+9
790 ON INT(AD%/9)+1 GOTO 800,810,820,830
800 SPRITE 3,I,0:GOTO 840
810 SPRITE 3,I,6:GOTO 840
820 SPRITE 3,I,3:GOTO 840
830 SPRITE 3,I,5
840 RETURN
850 '** 戦車の移動
860 BX=X(I):BY=Y(I)
870 X(I)=X(I)+COS(D(I)*RAD):Y(I)=Y(I)+SIN(D(I)*RAD)
880 A=(X(I)-X(-(I=0)))^2+(Y(I)-Y(-(I=0)))^2
890 IF A<144 THEN X(I)=BX:Y(I)=BY:DM(I)=DM(I)+1:Q=I:GOSUB 1070:GOTO 920
900 IF X(I)<0 OR X(I)>239 OR Y(I)<24 OR Y(I)>204 THEN ELSE 920
910 X(I)=BX:Y(I)=BY:DM(I)=DM(I)+1:Q=I:GOSUB 1070
920 MX=X(I)-SPRITE(I,6):MY=Y(I)-SPRITE(I,7)
930 SPRITE 6,I,MX,MY:SPRITE 6,2+I,MX,MY
940 RETURN
950 '** 戦車砲発射
960 L(I)=L(I)-1
970 IF PT<>4 OR L(I)>0 THEN 1050 ELSE L(I)=20
980 BEEP
990 A=SIN(-AD*RAD)*(X(I)-X(-(I=0)))+COS(-AD*RAD)*(Y(I)-Y(-(I=0)))
1000 B=COS(-AD*RAD)*(X(I)-X(-(I=0)))-SIN(-AD*RAD)*(Y(I)-Y(-(I=0)))
1010 IF ABS(A)<8 AND B<0 AND B>-100 THEN 1040
1020 CIRCLE(X(I)+COS(AD*RAD)*100+40,Y(I)+SIN(AD*RAD)*100+8),8,[50,50,50],,,,F
1030 GOTO 1050
1040 FOR J=0 TO 6:Q=-(I=0):DM(Q)=DM(Q)+1:GOSUB 1070:NEXT
1050 RETURN
1060 '** ダメージ表示
1070 LINE(16+Q*282,217-DM(Q)*3)-(22+Q*282,218-DM(Q)*3),PSET,[0,DM(Q)*4,255-DM(Q)*4],BF
1080 IF DM(Q)>=55 THEN W=-(Q=1):K=1
1090 RETURN
1100 '** キャラデータ
1110 ' 戦車*---*---*---*--- *---*---*---*---砲塔
1120 DATA "9988998899889900","0000000000000000"
1130 DATA "CCCCCCCCCCCC6600","0000AAAA00000000"
1140 DATA "4CCCCCCCCCCC6600","00AAAAAAA0000000"
1150 DATA "44CCCCCCCCCC6600","0AAAAAAAABBBBBBB"
1160 DATA "44CCCCCCCCCC6600","0AAA222AABBBBBBB"
1170 DATA "4CCCCCCCCCCC6600","00AA222AA0000000"
1180 DATA "CCCCCCCCCCCC6600","0000AAAA00000000"
1190 DATA "9988998899889900","0000000000000000"